package com.badlogic.gdx.physics.box2d.joints;

import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.physics.box2d.Joint;
import com.badlogic.gdx.physics.box2d.World;

/**
 *  A mouse joint is used to make a point on a body track a
 * specified world point. This a soft constraint with a maximum
 * force. This allows the constraint to stretch and without
 * applying huge forces.
 * NOTE: this joint is not documented in the manual because it was
 * developed to be used in the testbed. If you want to learn how to
 * use the mouse joint, look at the testbed.
 */
public class MouseJoint extends Joint
{
	public MouseJoint(World world, long addr) {
		super(world, addr);
	}

	/**
	 *  Use this to update the target point.
	 */
	public void setTarget(Vector2 target)
	{
		jniSetTarget( addr, target.x, target.y );
	}
	
	private native void jniSetTarget( long addr, float x, float y );
	
	/**
	 *  Use this to update the target point.
	 */
	final float[] tmp = new float[2];
	private final Vector2 target = new Vector2( );
	public Vector2 getTarget()
	{
		jniGetTarget( addr, tmp );
		target.x = tmp[0]; target.y = tmp[1];
		return target;
	}
	
	private native void jniGetTarget( long addr, float[] target );

	/**
	 *  Set/get the maximum force in Newtons.
	 */
	public void setMaxForce(float force)
	{
		jniSetMaxForce( addr, force );
	}
	
	private native void jniSetMaxForce( long addr, float force );
	
	/**
	 *  Set/get the maximum force in Newtons.
	 */
	public float getMaxForce()
	{
		return jniGetMaxForce( addr );
	}
	
	private native float jniGetMaxForce( long addr );

	/**
	 * Set/get the frequency in Hertz.
	 */
	public void setFrequency(float hz)
	{
		jniSetFrequency( addr, hz );
	}
	
	private native void jniSetFrequency( long addr, float hz );
	
	/**
	 * Set/get the frequency in Hertz.
	 */
	public float getFrequency()
	{
		return jniGetFrequency( addr );
	}

	private native float jniGetFrequency( long addr );
	
	/**
	 *  Set/get the damping ratio (dimensionless).
	 */
	public void setDampingRatio(float ratio)
	{
		jniSetDampingRatio( addr, ratio );
	}
	
	private native void jniSetDampingRatio( long addr, float ratio );
	
	/**
	 *  Set/get the damping ratio (dimensionless).
	 */
	public float getDampingRatio()
	{
		return jniGetDampingRatio( addr );
	}
	
	private native float jniGetDampingRatio( long addr );
}
